Skip to main content

Scheduler

xLua doesn't have an update function by itself, but we can fake it. The following script can be added to LuaBehaviour or InteractTriggerX to call a function on an interval.

Example#

  1. First initialize some variables for the scheduler:
self.schedulerId = nil
self.schedulerInterval = 0.3   --Runs every 0.3 seconds.self.timeBeforeStarting = 0.2  --Starts after 0.2 seconds.self.timeBeforeStopping = -1   --Never stops and will run endlessly.self.ignoreSlowMotion = false  --Will not slow down when slow motion is activated.
  1. Then create functions to schedule:
self.callOnSchedulerInterval = function(sche, t, s)    print("Im updating!") end
self.callOnSchedulerStop = function(sche)    print("Im stopping now")end
  1. Create the scheduler itself somewhere:
self.schedulerId = CL.Scheduler.Create({},    self.callOnSchedulerInterval,    self.schedulerInterval,    self.timeBeforeStopping,    self.timeBeforeStarting):SetUpdateChannel(CL.Scheduler.UpdateChannel.FixedUpdate):IgnoreTimeScale(self.ignoreSlowMotion):SetOnStop(self.callOnSchedulerStop).actionId
  1. Important! Don't forget to remove the scheduler or it will continue to run and will drain performance.
CL.Scheduler.RemoveSchedule(self.schedulerId)

It is very important though that you also call the RemoveSchedule function in the OnDestroy function so that it stops running when the weapon is destroyed.

function table:OnDestroy()    if self.schedulerId ~= nil then        CL.Scheduler.RemoveSchedule(self.schedulerId)    endend

User Variables#

Componentvariable
doesnt matterself.schedulerId
intself.schedulerInterval
intself.timeBeforeStopping
intself.timeBeforeStarting
boolself.ignoreSlowMotion
funcself.callOnSchedulerInterval
funcself.callOnSchedulerStop

FAQ#

Can I stop the scheduler after a certain time?#

Change the self.timeBeforeStopping to 10 to stop it after 10 seconds.

Can I stop the scheduler from slowing down during slow motion?#

Change the self.ignoreSlowMotion to true.

Tricks#

Call a function on the next frame#

local callOnSchedulerInterval = function(sche, t, s)    print("im executing next frame!") end
CL.Scheduler.Create({}, callOnSchedulerInterval)

Lerp a value (you can even use this with Curve)#

local callOnSchedulerInterval = function(sche, t, s)    local progress = t/s    local lerpedVec = UE.Vector3.Lerp(fromVector, toVector, progress)    print(lerpedVec)end
CL.Scheduler.Create({}, callOnSchedulerInterval, 0, 1)

Stop inside scheduler function#

local callOnSchedulerInterval = function(sche, t, s)    sche:Stop()end
CL.Scheduler.Create({}, callOnSchedulerInterval, 0, 1)